﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FotoLab.DomainLayer.Helper;
using System.Security.Cryptography;
using Microsoft.AspNet.Identity;
using System.Security.Claims;

namespace FotoLab.DomainLayer.Model
{
    public class Gebruiker: WithIdentity, IUser
    {

        public enum GebruikerStatus
        {
            ACTIEF,
            VERWIJDERD
        }

        public string GebruikersNaam { get; set; }
        public string Wachtwoord { get; set; }
        public Naam Naam { get; set; }
        public GebruikerStatus Status { get; set; }

        string IUser<string>.Id
        {
            get { return Id.ToString(); }
        }

        string IUser<string>.UserName
        {
            get { return GebruikersNaam; }
            set { GebruikersNaam = value; }
        }

        public bool IsWachtwoord(string wachtwoord)
        {
            return Wachtwoord.Equals(EncryptWachtwoord(wachtwoord));
        }

        public void NieuwWachtwoord(string wachtwoord)
        {
            Wachtwoord = EncryptWachtwoord(wachtwoord);
        }

        private string EncryptWachtwoord(string wachtwoord)
        {
            // Gebaseerd op http://stackoverflow.com/a/26558102
            // Toegevoegd: salt en pepper;
            using (SHA1Managed sha1 = new SHA1Managed())
            {
                var salt = "<$t9OT3QteCtTbwM2";
                var pepper = Id.ToString();

                var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(salt + wachtwoord + pepper));
                var sb = new StringBuilder(hash.Length * 2);

                foreach (byte b in hash)
                {
                    sb.Append(b.ToString("x2"));
                }

                return sb.ToString();
            }
        }

    }
}
